package ar.edu.utn.frba.disenio.aterrizar;

import java.util.ArrayList;

import java.util.Collection;
import com.lanchita.AerolineaLanchita;

import ar.edu.utn.frba.disenio.aterrizar.Asientos;
import ar.edu.utn.frba.disenio.aterrizar.Busqueda;
import ar.edu.utn.frba.disenio.aterrizar.Usuario;
import ar.edu.utn.frba.disenio.aterrizar.UsuarioEstandar;

public class Aterrizar {
	
	//TODO MALO ATRIBUTOS public
	public AerolineaLanchita lanchita;
	//TODO el porcentaje por impuesto es particular de CADA AEROLINEA
	public int porcentajeImpuesto;
	public Collection<Aerolinea> aerolineas=new ArrayList<Aerolinea>();
	
	public Collection<Asientos> buscarAsientos(Busqueda busqueda, Usuario usuario) {
		
		usuario.agregarBusquedaAlHistorial(busqueda);
		
		Collection<Asientos> busquedaFiltrada = this.filtrarBusqueda(busqueda);
	
		return busquedaFiltrada;
	}
	
	//TODO revisar el asunto de las super-ofertas
	public Collection<Asientos> buscarAsientosSuperOfertas(Busqueda busqueda, UsuarioVIP usuario) {
		
		usuario.agregarBusquedaAlHistorial(busqueda);
		
		Collection<Asientos> busquedaFiltrada = this.filtrarBusquedaVIP(busqueda);
	
		return busquedaFiltrada;
	}

	private Collection<Asientos> filtrarBusqueda(Busqueda busqueda) {
		
		String[][] resultadoBusqueda;
	    Collection<Asientos> asientos = null;
	    
	    resultadoBusqueda = lanchita.asientosDisponibles(busqueda.origen, busqueda.fechaSalida, busqueda.horaSalida, busqueda.destino, busqueda.fechaLlegada, busqueda.horaLlegada);
	
	    asientos=this.formatear(resultadoBusqueda);
	    
	    if (busqueda.claseAsiento != null) {
	            asientos = busqueda.filtrarPorAsiento(asientos, busqueda.claseAsiento);
	    }   
	    
	    if (busqueda.ubicacionEnAvion != null) {
            asientos = busqueda.filtrarPorUbicacion(asientos, busqueda.ubicacionEnAvion);
    }  
	    
	    return asientos;
	}
	
	
	private Collection<Asientos> filtrarBusquedaVIP(Busqueda busqueda) {
	
		String[][] resultadoBusqueda;
	    Collection<Asientos> asientos = null;
	    Collection<Asientos> asientosFiltradosPrimeraClase = null;
	    Collection<Asientos> asientosFiltradosEjecutiva = null;
	    
	    resultadoBusqueda = lanchita.asientosDisponibles(busqueda.origen, busqueda.fechaSalida, busqueda.horaSalida, busqueda.destino, busqueda.fechaLlegada, busqueda.horaLlegada);
	
	    asientos=this.formatear(resultadoBusqueda);
	    asientosFiltradosPrimeraClase=this.formatear(resultadoBusqueda);
	    
	    busqueda.claseAsiento="P";//busco por asiento de primera clase
	    asientosFiltradosPrimeraClase = busqueda.filtrarPorTipoClaseyPrecio(asientos,busqueda, 8000);
	    int cantidadAsientosPrimeraClase=asientosFiltradosPrimeraClase.size();
	    
	    busqueda.claseAsiento="E";//busco por asiento de primera clase
	    asientosFiltradosEjecutiva = busqueda.filtrarPorTipoClaseyPrecio(asientos,busqueda, 4000);
	    int cantidadAsientosEjecutiva = asientosFiltradosEjecutiva.size();

	    if(cantidadAsientosPrimeraClase>0){
	    	if(cantidadAsientosEjecutiva>0){
	    		asientos=asientosFiltradosPrimeraClase.addAll(asientosFiltradosEjecutiva);
	    	}else{
            asientos=asientosFiltradosPrimeraClase;
          }
	    }else{
	    	if(cantidadAsientosEjecutiva>0){
	    		asientos=asientosFiltradosPrimeraClase.addAll(asientosFiltradosEjecutiva);
	    	}
	    }
	    
	    return asientos;
		
	}
	
	@SuppressWarnings("null")
	public Collection<Asientos> formatear(String[][] resultadoBusqueda) {
		
		Collection<Asientos> asientosFormateados= new ArrayList<Asientos>();
		for ( int i = 0; i < resultadoBusqueda.length  ; i++ ){
			Asientos asiento = new Asientos();
			asiento.codigoAsiento = resultadoBusqueda[i][0];
			asiento.precio = resultadoBusqueda[i][1];
			asiento.claseAsiento = resultadoBusqueda[i][2];
			asiento.ubicacionEnAvion = resultadoBusqueda[i][3];
			asiento.estado = resultadoBusqueda[i][4];
			
			asientosFormateados.add(asiento);
		}
	
		return asientosFormateados;
	}


}
